
function XX = Cr3bp_Rot2InerMtx3D(tt , xx , pc , mu)
%
% 圆型限制性三体模型（CR3BP）坐标系转换
% 1) rotating -> inertial
% 2) 3D
% 3) 矩阵转换
%
% 输入：
% tt：       时间 , N x 1
% xx：      旋转系状态 , N x 6
% pc_ini：惯性系中心 , 1（P1 centered）/ 2（P2 centered） , 1 x 1
% mu：    引力常数 , 1 x 1
%
% 参考：
% 2021_ZimovanSpreen, page 37-40
%
% 时间：2024年06月03日
% 作者：张晨
% 单位：CSU
% 邮箱：chenzhang@csu.ac.cn
%%%%%%%%%%%%%%%%%%%%%%%

if size(xx , 2) ~= 6
    disp(' ========== wrong! xx row num! ========== ')
    XX = [];
    return;
end

if size(tt , 2) ~= 1
    disp(' ========== wrong! tt row num! ========== ')
    XX = [];
    return;
end

sin_tt = sin(tt);
cos_tt = cos(tt);
x = xx(: , 1);
y = xx(: , 2);
z = xx(: , 3);
vx = xx(: , 4);
vy = xx(: , 5);
vz = xx(: , 6);

if strcmp(pc , 'p1')
    % P1 centered

    XX = [cos_tt .* (mu + x) - y .* sin_tt, ...
        sin_tt .* (mu + x) + y .* cos_tt, ...
        z, ...
        vx .* cos_tt - sin_tt .* (mu + x) - y .* cos_tt - vy .* sin_tt, ...
        cos_tt .* (mu + x) + vy .* cos_tt + vx .* sin_tt - y .* sin_tt, ...
        vz];

elseif strcmp(pc , 'p2')
    % P2 centered

    XX = [cos_tt .* (mu + x - 1) - y .* sin_tt, ...
        sin_tt .* (mu + x - 1) + y .* cos_tt, ...
        z, ...
        vx .* cos_tt - sin_tt .* (mu + x - 1) - y .* cos_tt - vy .* sin_tt, ...
        cos_tt .* (mu + x - 1) + vy .* cos_tt + vx .* sin_tt - y .* sin_tt, ...
        vz];

else

    fprintf('Wrong！')
    XX;
    return;

end

end
